Marking region 0x13C7DBF-0x13C7DC0 as cpu modified, and is already GPU modified
SynchronizeBufferImpl:1639: BAD1! cpu modified true gpu modified false
SynchronizeBufferImpl:1644: Pages 0x13C7DBE-0x13C7DC0 are badMarking region 0x13C7DBF-0x13C7DC0 as cpu modified, and is already GPU modified
SynchronizeBufferImpl:1639: BAD1! cpu modified true gpu modified false
SynchronizeBufferImpl:1644: Pages 0x13C7DBE-0x13C7DC0 are bad Marking region 0x13C9590-0x13C9591 as TransformFeedbackBuffer gpu modified
Marking region 0x13C9590-0x13C9591 as cpu modified, and is already GPU modified
SynchronizeBufferImpl:1644: Pages 0x13C9590-0x13C9591 are bad
1# Skip install rules for all externals
set_directory_properties(PROPERTIES EXCLUDE_FROM_ALL ON)
1
1
1
1
1
1
5
1
3Africa/Jubagit submodule add ... always inserts tab.
.git suffix in all url.
3
2
1
1
1
3
4
5
2
1
2RasterizerAccelerated: Put a gigantic array behind a unique_ptr, because UBSan has a hardcoded limit of how big it thinks objects can be, specifically when dealing with offset-to-top values used with multiple inheritance. Hopefully this doesn't have...
2
1
1
2
5
1 struct NcaBucketInfo {
static constexpr size_t HeaderSize = 0x10;
fs::Int64 offset;
fs::Int64 size;
u8 header[HeaderSize];
};
static_assert(util::is_pod<NcaBucketInfo>::value);
struct NcaCompressionInfo {
NcaBucketInfo bucket;
u8 reserved[8];
};
static_assert(util::is_pod<NcaCompressionInfo>::value);
struct NcaSparseInfo {
NcaBucketInfo bucket;
fs::Int64 physical_offset;
u16 generation;
u8 reserved[6];
}; (edited)"HostMemory: Simple map", "[common]". kinda puzzling that would be the only one to failuser folder where the executable is (edited)_WIN32
3
4
4
(edited)
resolutionScaleFactor * (1920x1080) (or r*1280x720 if docked) but, when using extended memory layout, mods are able to make the games render at resolutions beyond 1080p. When using such a mod to render to native 2160p for example, and set the emulator Resolution Scale to 1x, the cap...
CompressBCN and it looks to me that it could potentially be optimized to reduce the amount of iterations if instead of directly iterating over the width and height of the texture, it iterates over blocks of size 4x4 pixels (block_size) limiting the boundaries in the process.
Something like this? I'm not a C++ developer so I'm not that familiar with the language's specifics.
c++
constexpr u32 block_size = 4;
const u32 width_blocks = Common::DivideUp(width, block_size);
const u32 height_blocks = Common::DivideUp(height, block_size);
for (u32 y = 0; y < height_blocks; y++) {
const u32 start_x = y * block_size;
const u32 end_x = std::min(width_blocks, start_x + block_size);
for (u32 x = start_x; x < end_x; x++) {
// ...
}
}
With that, in the best case scenario where the texture's width and height are both multiples of 4, the optimized code will save area / 16 iterations, isn't?
In a 1920x1080 texture (just to put an example) that would be saving 129 600 iterations.
The idea came after reviewing this webpage https://www.reedbeta.com/blog/understanding-bcn-texture-compression-formats/ where they put that The BCn formats all operate in terms of 4×4 blocks of pixels.CompressBCN and it looks to me that it could potentially be optimized to reduce the amount of iterations if instead of directly iterating over the width and height of the texture, it iterates over blocks of size 4x4 pixels (block_size) limiting the boundaries in the process.
Something like this? I'm not a C++ developer so I'm not that familiar with the language's specifics.
c++
constexpr u32 block_size = 4;
const u32 width_blocks = Common::DivideUp(width, block_size);
const u32 height_blocks = Common::DivideUp(height, block_size);
for (u32 y = 0; y < height_blocks; y++) {
const u32 start_x = y * block_size;
const u32 end_x = std::min(width_blocks, start_x + block_size);
for (u32 x = start_x; x < end_x; x++) {
// ...
}
}
With that, in the best case scenario where the texture's width and height are both multiples of 4, the optimized code will save area / 16 iterations, isn't?
In a 1920x1080 texture (just to put an example) that would be saving 129 600 iterations.
The idea came after reviewing this webpage https://www.reedbeta.com/blog/understanding-bcn-texture-compression-formats/ where they put that The BCn formats all operate in terms of 4×4 blocks of pixels. for (u32 z = 0; z < depth; z++) {
for (u32 y = 0; y < height; y += 4) {
auto compress_row = [z, y, width, height, plane_dim, f, data, output]() {
for (u32 x = 0; x < width; x += 4) {
// Gather 4x4 block of RGBA texelsmaxPerStageDescriptorSampledImages. Looking at the switch vulkan driver in vulkaninfo the...CompressBCN and it looks to me that it could potentially be optimized to reduce the amount of iterations if instead of directly iterating over the width and height of the texture, it iterates over blocks of size 4x4 pixels (block_size) limiting the boundaries in the process.
Something like this? I'm not a C++ developer so I'm not that familiar with the language's specifics.
c++
constexpr u32 block_size = 4;
const u32 width_blocks = Common::DivideUp(width, block_size);
const u32 height_blocks = Common::DivideUp(height, block_size);
for (u32 y = 0; y < height_blocks; y++) {
const u32 start_x = y * block_size;
const u32 end_x = std::min(width_blocks, start_x + block_size);
for (u32 x = start_x; x < end_x; x++) {
// ...
}
}
With that, in the best case scenario where the texture's width and height are both multiples of 4, the optimized code will save area / 16 iterations, isn't?
In a 1920x1080 texture (just to put an example) that would be saving 129 600 iterations.
The idea came after reviewing this webpage https://www.reedbeta.com/blog/understanding-bcn-texture-compression-formats/ where they put that The BCn formats all operate in terms of 4×4 blocks of pixels. astc.cpp specifically at this integer division p.Component(c) = static_cast<u16>(255.0 * (Cf / 65536.0) + 0.5);.
Couldn't this be change into a shift operation?, so far as I know integer divisions are way more expensive than bit operations. Taking into account that this division is done blockHeight x blockWidth times it may be worth it.p.Component(c) = static_cast<u16>((Cf * 255 + 32768) >> 16);#include <cmath>
#include <cstdint>
#include <iostream>
#include <limits>
int main() {
for (uint32_t c = 0; c < 65536; c++) {
float a = std::floor(255.0f * (float(c) / 65536.0) + 0.5);
float b = (c * 255 + 32768) >> 16;
float diff = std::abs(b - a);
if (diff > std::numeric_limits<float>::epsilon()) {
std::cout << c << " -> " << diff << std::endl;
}
}
return 0;
}for (var Cf = 0; Cf < 65536; Cf++) {
original = Math.floor(255.0 * (Cf / 65536.0) + 0.5)
bitShift = (Cf * 255 + 32768) >> 16
if (original - bitShift != 0) {
console.log("Not equal for: " + Cf)
}
} (edited)p.Component(c) = static_cast<u16>((Cf * 255 + 32768) >> 16); Common::ThreadWorker& workers{GetThreadWorkers()};) so the estimated time should be divided by the number of cores of the processor? (edited)values/?[ 23.895265] Debug <Critical> video_core/texture_cache/format_lookup_table.cpp:operator():242: Assertion Failed!
texture format=47 srgb=false components={7 4 4 4}
2. [ 24.014287] Debug <Critical> video_core/engines/maxwell_dma.cpp:operator():74: Assertion Failed!
3. [ 136.890644] Debug <Critical> video_core/renderer_vulkan/vk_texture_cache.cpp:operator():1186: Assertion Failed!
Unimplemented format copy from D32_FLOAT to A8B8G8R8_UNORMutil_shaders.ConvertS8D24minsd and pminsd smhscale filter which I suppose is required for pix formats conversions.
1
2
5
13config.ini file, but as far as I know, it isn't implemented fo...std::shared_ptr<Control::ChannelState> CreateChannel(s32 channel_id) {
auto channel_state = std::make_shared<Tegra::Control::ChannelState>(channel_id);
channels.emplace(channel_id, channel_state);
scheduler->DeclareChannel(channel_state);
return channel_state;
}
channel_id is always an unique key? (edited)free_channel_ids and stuff related to that (edited)std::shared_ptr<Control::ChannelState> CreateChannel(s32 channel_id) {
auto channel_state = std::make_shared<Tegra::Control::ChannelState>(channel_id);
channels.emplace(channel_id, channel_state);
scheduler->DeclareChannel(channel_state);
return channel_state;
}
channel_id is always an unique key? (edited)new_channel_id++ in AllocateChannel() after you answered.TickWork() the mutex is unlocked and locked using sync_request_mutex.unlock() and sync_request_mutex.lock().
Isn't this the same as using lck.unlock(); lck.lock();?
https://github.com/yuzu-emu/yuzu/blob/efda6cc9ec4b917ff1478f0bf3a181efec929553/src/video_core/gpu.cpp#L133filesystem::file_size over the entire project gives no results, what file_size is it using?fs::file_size[1032.848785] HW.Memory core/memory.cpp:operator():239: Unmapped ReadBlock @ 0x00000010D7AC9000 (start address = 0x00000010D7AB9000, size = 69632)
C:\Users\[UserName]\AppData\Local\CrashDumps\
Last build that behaved normally is Mainline 1503
1CMake Error at externals/vcpkg/scripts/buildsystems/vcpkg.cmake:633 (_add_library):
_add_library cannot create ALIAS target "Vulkan::Headers" because another
target with the same name already exists.
Call Stack (most recent call first):
externals/Vulkan-Headers/CMakeLists.txt:47 (add_library)YUZU_USE_EXTERNAL_VULKAN_HEADERS needs to be disabledastc_decoder.comp and I have found some equivalents expressions that may or may not improve the decodification speed of the astc textures.
But I have never profiled anything gpu related so I'm not sure how should I measure it.clamp() in ClampByte() the actual implementation is this
uvec4 ClampByte(ivec4 color) {
for (uint i = 0; i < 4; ++i) {
color[i] = (color[i] < 0) ? 0 : ((color[i] > 255) ? 255 : color[i]);
}
return uvec4(color);
}
Instead of something like
uvec4 ClampByte(ivec4 color) {
return uvec4(clamp(color, 0, 255));
}
Or that in BitTransferSigned the current implementation uses an if that can be simplified into a bit operation
From this
ivec2 BitTransferSigned(int a, int b) {
ivec2 transferred;
transferred.y = b >> 1;
transferred.y |= a & 0x80;
transferred.x = a >> 1;
transferred.x &= 0x3F;
if ((transferred.x & 0x20) > 0) {
transferred.x -= 0x40;
}
return transferred;
}
To this if I'm not mistaking
ivec2 BitTransferSigned(int a, int b) {
ivec2 transferred;
transferred.y = b >> 1;
transferred.y |= a & 0x80;
transferred.x = a >> 1;
transferred.x &= 0x3F;
transferred.x -= ((transferred.x >> 5) & 1) << 6;
return transferred;
}
6clamp() in ClampByte() the actual implementation is this
uvec4 ClampByte(ivec4 color) {
for (uint i = 0; i < 4; ++i) {
color[i] = (color[i] < 0) ? 0 : ((color[i] > 255) ? 255 : color[i]);
}
return uvec4(color);
}
Instead of something like
uvec4 ClampByte(ivec4 color) {
return uvec4(clamp(color, 0, 255));
}
Or that in BitTransferSigned the current implementation uses an if that can be simplified into a bit operation
From this
ivec2 BitTransferSigned(int a, int b) {
ivec2 transferred;
transferred.y = b >> 1;
transferred.y |= a & 0x80;
transferred.x = a >> 1;
transferred.x &= 0x3F;
if ((transferred.x & 0x20) > 0) {
transferred.x -= 0x40;
}
return transferred;
}
To this if I'm not mistaking
ivec2 BitTransferSigned(int a, int b) {
ivec2 transferred;
transferred.y = b >> 1;
transferred.y |= a & 0x80;
transferred.x = a >> 1;
transferred.x &= 0x3F;
transferred.x -= ((transferred.x >> 5) & 1) << 6;
return transferred;
} clamp() in ClampByte() the actual implementation is this
uvec4 ClampByte(ivec4 color) {
for (uint i = 0; i < 4; ++i) {
color[i] = (color[i] < 0) ? 0 : ((color[i] > 255) ? 255 : color[i]);
}
return uvec4(color);
}
Instead of something like
uvec4 ClampByte(ivec4 color) {
return uvec4(clamp(color, 0, 255));
}
Or that in BitTransferSigned the current implementation uses an if that can be simplified into a bit operation
From this
ivec2 BitTransferSigned(int a, int b) {
ivec2 transferred;
transferred.y = b >> 1;
transferred.y |= a & 0x80;
transferred.x = a >> 1;
transferred.x &= 0x3F;
if ((transferred.x & 0x20) > 0) {
transferred.x -= 0x40;
}
return transferred;
}
To this if I'm not mistaking
ivec2 BitTransferSigned(int a, int b) {
ivec2 transferred;
transferred.y = b >> 1;
transferred.y |= a & 0x80;
transferred.x = a >> 1;
transferred.x &= 0x3F;
transferred.x -= ((transferred.x >> 5) & 1) << 6;
return transferred;
} #include <Eigen/Dense>
using ivec2 = Eigen::Vector<int, 2>;
__device__ ivec2 BitTransferSigned(int a, int b) {
ivec2 transferred;
transferred[1] = b >> 1;
transferred[1] |= a & 0x80;
transferred[0] = a >> 1;
transferred[0] &= 0x3F;
if ((transferred[0] & 0x20) > 0) {
transferred[0] -= 0x40;
}
return transferred;
}
__global__ void Kernel(int* x) {
ivec2 res = BitTransferSigned(x[0], x[1]);
x[0] = res[0];
x[1] = res[1];
}
Generates this for Ampere (edited)Kernel(int*):
IMAD.MOV.U32 R1, RZ, RZ, c[0x0][0x28]
IMAD.MOV.U32 R2, RZ, RZ, c[0x0][0x160]
ULDC.64 UR4, c[0x0][0x118]
IMAD.MOV.U32 R3, RZ, RZ, c[0x0][0x164]
LDG.E R0, [R2.64]
LDG.E R4, [R2.64+0x4]
LOP3.LUT P0, RZ, R0, 0x40, RZ, 0xc0, !PT
SHF.R.U32.HI R6, RZ, 0x1, R0
SHF.R.S32.HI R5, RZ, 0x1, R4
LOP3.LUT R7, R6, 0x3f, RZ, 0xc0, !PT
LOP3.LUT R5, R5, 0x80, R0, 0xf8, !PT
@P0 LOP3.LUT R7, R7, 0xffffffc0, RZ, 0xfc, !PT
STG.E [R2.64+0x4], R5
STG.E [R2.64], R7
EXIT.visible .entry Kernel(int*)(
.param .u64 Kernel(int*)_param_0
)
{
ld.param.u64 %rd1, [Kernel(int*)_param_0];
cvta.to.global.u64 %rd2, %rd1;
ld.global.u32 %r1, [%rd2];
ld.global.u32 %r2, [%rd2+4];
shr.s32 %r3, %r2, 1;
and.b32 %r4, %r1, 128;
or.b32 %r5, %r3, %r4;
shr.u32 %r6, %r1, 1;
and.b32 %r7, %r6, 63;
and.b32 %r8, %r1, 64;
setp.eq.s32 %p1, %r8, 0;
or.b32 %r9, %r7, -64;
selp.b32 %r10, %r7, %r9, %p1;
st.global.u32 [%rd2], %r10;
st.global.u32 [%rd2+4], %r5;
ret;
}EncodingData into a single uint, rather than 4 separate uints


IsValidVirtualAddressRange, but the PR changed it to just rely on ReadBlock / WalkBlock instead.
The crash can also be triggered when viewing memory through normal gdb.
...
2
1
2
6VMA_* options need to be defined before every inclusion of vk_mem_alloc.h, not just in the implementation. So regroup them in a header file with vk_mem_alloc.h and include this one everywhere instead., like and `, create many stupid defines like #define True 1 and #define None 0L, and global variables like Time and GC, which mess up with the rest of the code. So some headers need to be included before the inclusion of "video_core/vulkan_common/vulkan.h"` by other headers.
9qt-config.ini I've seen that network_interface gets set to nothing and network_interface\default to true as soon as I open Yuzu (before reopening it it network_interface has the interface name and...VK_FEATURE_1_1 macros.
1(*.nca, *.nsp, *.xci)", file browser shows nothing. When selecting one of three single types, files gets shown. Sounds like an incorrect using of file filters in Qt Select dialogue 0001000 and easily find qlaunch.(*.nca, *.nsp, *.xci)", file browser shows nothing. When selecting one of three single types, files gets shown. Sounds like an incorrect using of file filters in Qt Select dialogue AppData is described: The lifetime of the app data is tied to the lifetime of the app. If the app is removed, all of the app data will be lost as a consequence. Don't use app data to store user data or anything that users might perceive as valuable and irreplaceable.
An example of something valu...
1
assembly_programs is not yet initialized at this point of the pipeline creation, so the assembly_shaders check always returned false.
10
9
3polyfill_ranges.h

1


3
3
1decompiled_ when they've already been decompiled to make it easy to see what's new.
Also dumps after they're been translated, which makes it possible to conditionally dump some shaders based on instructions they use. I wanted this for only dumping shaders that use the SAM/RAM instructions in Bayonetta 3 for example.
1LockService call that prevents multiple requests to the same instance of an IPC server from executing simultaneously:
https://github.com/yuzu-emu/yuzu/blob/6a5db5679b61d3d73244e42682f1b34d401e7736/src/core/hle/service/service.cpp#L170
This should not exist, and real server manager code does not do this, but a fair amount of yuzu code now depends on having this lock. Instead of unlocking them all and seeing what...
-Warray-bounds warnings coming from externals/dynarmic. I could have added a workaround in externals/CMakeLists.txt similar to what this PR does for other externals, but given Dynarmic's close affiliation with Yuzu, it would be better to fix it upstream.
Besides that, on my machine, this makes the build warning-free except for some warnings from glslangValidator and AutoMoc.
Details:
2[ 71.953737] Debug common\virtual_buffer.cpp:operator ():26: Assertion Failed!
1


gdbserver yuzuisGame was deprecated in Android Oreo and appCategory is supposed to be the replacement. But I'll be keeping both just in case there are game launchers that only check for isGame.#pragma GCC optimize ("O0") at the top of the file
github.event.pull_request.draft specifically it should get merged, which I dont believe it does https://github.com/yuzu-emu/yuzu/blob/master/.ci/templates/merge.yml (edited)ABXY buttons has two popular layouts, known as xbox and switch layout, the positions of AB and XY are opposite
!image

Image Format of an OpTypeImage declaration must not be Unknown, for variables which are used for OpAtomic* operations.
~ by default (edited)user in home directory tbh, although I do wonder what would be the best way to solve this
user folder in the current working directory on non-windows and non-android platforms. At least on linux, the CWD will default to ~ if ran through an application launcher, and a folder at ~/user will enable portable mode.
As installations with a package manager will not make use of portable mode, we should expose a compile time option to allow package maintainers disable this undesirable behavior.
closes #11441
2-Werror. It fails on the file src/core/internal_network/network.cpp.
1yuzu_log_1.txt attached below (multiple commands that should trigger v...
1
4bash
$ yuzu
terminate called after throwing an instance of 'std::out_of_range'
what(): stoll
[1] 47814 IOT instruction (core dumped) yuzu
I tried to open yuzu from desktop but it crashed. Then I tried to launch it from the shell, and got the message above.
2
4execute_program_callback must be initialized by the frontend
What does that process look like for Qt?execute_program_callback must be initialized by the frontend
What does that process look like for Qt? m_load_result state was reset. This behavior is corrected now.// We already do this for homebrew so we can just stub it out well this is a lie so in this PR we actually implement this function.%appdata%/yuzu/nand/system/save/8000000000000030/MiiDatabase.dat
This implementation should be pretty accurate to the switch. As such dumping databases from console or even using one from Ryujinx should be fully compatible. This PR doesn't have Mii Applet support so there isn't any us...
1
1
1Miraculous: Rise of the Sphinx, textures seem to be kinda wrong.
!0100d06015b58000_2023-09-18_22-54-19-503
4Luigi's Mansion 3 couldn't load and instead caused Yuzu to segfault randomly. The log says:
```
[ 0.446392] Service.FS core/file_sys/submission_package.cpp:ReadNCAs:245: NCA with ID 0fe8c30f50fa8d12c9b9b85045fe6473.nca is listed in content metadata, but cannot be found in PFS. NSP appears to be corrupted.
[ 0.446601] Loader core/loader/loader.cpp:GetLoader:265: Loading file Luigis Mansion 3 [0100DCA0064A6000][v0] (6.35 GB).nsp as NS...
7
8
4
2tools->mii editor.
You can create, edit or even load your mii from an amiibo using your joycon. Using them in games or anything related. All features are fully supported with exception of send/receive from other consoles.
Closes: #11280

qt-config.ini to the game-specific ini files.
2
1find_package() just fine, but when attempting to link it to the vita3k target that the project provides in the same way as yuzu, I encounter an error telling me that Qt::WinMain cannot be found, same if I try Qt::CoreQt5 "works" (as in, doesn't throw any errors), but the project is unable to detect that the libs are where they are, neither do I get the ability to use any of the includes set(imported_location "${_qt5Core_install_prefix}/lib/qtmaind.lib")build/windows-vs2022/external/qt-5.15.2-msvc2019_64/, the vita3k equivalenttools->Amiibo.
Special thanks to byte for implementing the hard vi, nvnflinger stuff.
!0100000000001002_2023-09-29_00-43-34-549
.
IAlbumAccessorService. Allowing for the Album applet to boot. While I can't guarantee that this applet is fully functional due the nature of sharing and editing images. Is functional enough to see all your screenshots. You can access this applet via Tools->Load Album
!010000000000100d_2023-10-01_21-14-08-795
4
1(nn::account::Uid, buffer) -> bufferhas_deleted_buffers.
The second step is then synchronising the memory once the buffers are confirmed, and adding the binding.
Currently we have a synchronise call insid...
1ffmpeg: fixes assembler issues when building with binutils 2.41+
mbedtls: remove workarounds and switch to upstream source
1
QStandardPaths::writableLocation. This change addresses an issue where the desktop path was not correctly identified when its location was customized, as shown in the attached screensh...GetAlbumFileList3AaeAruid returns a ApplicationAlbumEntry list. Finally these should auto mount.
I also fully implemented GetAlbumFileList0AafeAruidDeprecated so it will now use the correct date range.
Fixes SSBU replays menu.[1741/2271] Building CXX object src/co...core.dir/hle/service/caps/caps_a.cpp.o
FAILED: src/core/CMakeFiles/core.dir/hle/service/caps/caps_a.cpp.o
This is likely due to changes introduced in commit 8347e5c which touches caps_a.cpp
std::move with std::forward where appropriate.StoreWithImage and SaveReportWithUser.
This PR addresses this issue by letting them be accessed directly. I also added a warning log to help identify this issue on the rest of the codebase as it's probably an error.
1
3
2
2readInvocationARB needs all participating lanes to be active to return valid results if that lane's index is to be read from. The previous shfl_in_bounds condition could mask some lanes from participating, causing the data read from their invocation to be undefined.
Instead, the shfl_in_bounds check should happen after all lanes participate in readInvocationARB to avoid undefined behavior.
Verified to fix previously failing nxgpucatch tests. Likely fixes graphical corruption in ...sdmc folder, even if they were disabled in Properties > Add-Ons > SDMC. This might also happen with other games, but I don't have any other games to test with.
configure_camera.h /.cpp, configure_audio.h/.cpp
Specific Lines Of Code:
const QList<QCameraInfo> cameras = QCameraInfo::availableCameras(); -> Gets all available cameras in the system
QList<QAudioDeviceInfo> audioDevices = QAudioDeviceInfo::availableDevices(QAudio::AudioOutput); -> Should get all audio outputs in the system(My code not working, not giving me any audio outputs) (edited) const auto application_data_buffer = ctx.ReadBuffer(0);
const auto image_data_buffer = ctx.ReadBuffer(1);
const auto thumbnail_image_data_buffer = ctx.ReadBuffer(2);nand. If I am no longer playing a game, this feature allows you to quickly remove the corresponding UPD and DLC after the game itself has been removed.
3VK_ERROR_INCOMPATIBLE_DRIVER if apiVersion was larger than 1.0. Implementations that support Vulkan 1.1 or later must not return VK_ERROR_INCOMPATIBLE_DRIVER for any value of apiVersion.
apiVersion as the highest API version the application targets, and will validate API usage against the m...stbi_write_png_to_func() from the public API instead of the private internal function stbi_write_png_to_mem().
Sadly stb_dxt.h cannot be unbundled because its' a modified version.SaveCurrentScreenshot. This function is a bit more complicated from the others since the game doesn't provide the image data. This allows to take screenshots on Pokémon Scarlet on the latest game update.
!0100a3d008c5c000_2023-10-26_17-15-17-000main.h feels odd
1


9
git submodule update --init --recursive alreadyerror marshalling arguments for get_surface_feedback (signature 4no): null value passed for arg 1
Error marshalling request: Invalid argument
The Wayland connection experienced a fatal error: Invalid argument

SetGamemodeDisabled() is called if the settings is changed, so we would only need to change from false to true in the Setting definition in settings.h
nvidia on gdm + wayland is giving me the really creepy "it just works" vibe now that i'm in the desktopnn::hid::detail::GetNpadPowerInfo this will throw nn::detail::UnexpectedDefaultImpl on any battery value higher than 4. Fix this property by using the apropiarte range.--mii or -m to launch the Mii Applet and edit Miis without launching the emulator first and close Yuzu after exiting the Mii Editor afterwards.
[ 0.246099]fitsSystemWindows attribute and use the padding option directly in the xml viewTrombone Champ and WarioWare: Put a lid on it to be played with the joycon IR sensor.
Note: Other Wario mini games that use IR still require the tera image processor to be functional.test_window to avoid setting wsi.render_surface as nullptr, which causes a crash in Wayland as per #11941std::min(uintptr_t, uint64_t) apparently doesn't work
10



>> 
nn::time::StandardUserSystemClock::GetCurrentTime in the sdk ends up doing local_context.offset + ((steady time point + current tick) / 1'000'000'000) which ends up taking it back to 2023/01/01 because of the negative offset. How is this meant to be updated? I don't see anywhere it's done.nn::time::StandardUserSystemClock::GetCurrentTime in the sdk ends up doing local_context.offset + ((steady time point + current tick) / 1'000'000'000) which ends up taking it back to 2023/01/01 because of the negative offset. How is this meant to be updated? I don't see anywhere it's done.
11nn::time::CalibrateSystemClockWithInternalOffset in the sdk does it, but I haven't been able to find where that's called from.Result SystemClockCore::SetCurrentTime(s64 time) {
SteadyClockTimePoint time_point{};
R_TRY(m_steady_clock.GetCurrentTimePoint(time_point));
SystemClockContext context{
.offset = time - time_point.time_point,
.steady_time_point = time_point,
};
R_RETURN(SetContextAndWrite(context));
} this function is the main problem. The steady clock returns the current time, but the input time is 2023/01/01, so the offset goes negative here.nn::time::StandardUserSystemClock::GetCurrentTimeResult SystemClockCore::SetCurrentTime(s64 time) {
SteadyClockTimePoint time_point{};
R_TRY(m_steady_clock.GetCurrentTimePoint(time_point));
SystemClockContext context{
.offset = time - time_point.time_point,
.steady_time_point = time_point,
};
R_RETURN(SetContextAndWrite(context));
} this function is the main problem. The steady clock returns the current time, but the input time is 2023/01/01, so the offset goes negative here. LibAppletLns 0100000000001010
nim 0100000000000025
LibAppletShop 010000000000100b
maintenance 0100000000001015
Application 01008bb00013c000
LibAppletWeb 010000000000100a
starter 0100000000001012
qlaunch 0100000000001000
netConnect 0100000000001006 GetContext from system clock core 0x2EB4DB02480 -- offset -1700247783 time point 1700247783 so setting the time to 0 makes them equal lolglue\time\time_zone.cpp:Handle_ToPosixTime:227: called. calendar year 1970 month 1 day 1 hour 0 minute 0 second 13 and it returns 0 as the baseResult TimeManager::SetupStandardSteadyClockCore() {
Common::UUID external_clock_source_id{};
auto res = m_set_sys->GetExternalSteadyClockSourceId(external_clock_source_id);
ASSERT(res == ResultSuccess);
s64 external_steady_clock_internal_offset_s{};
res = m_set_sys->GetExternalSteadyClockInternalOffset(external_steady_clock_internal_offset_s);
ASSERT(res == ResultSuccess);
auto one_second_ns{
std::chrono::duration_cast<std::chrono::nanoseconds>(std::chrono::seconds(1)).count()};
s64 external_steady_clock_internal_offset_ns{external_steady_clock_internal_offset_s *
one_second_ns};
s32 standard_steady_clock_test_offset_m{
GetSettingsItemValue<s32>(m_set_sys, "time", "standard_steady_clock_test_offset_minutes")};
auto one_minute_ns{
std::chrono::duration_cast<std::chrono::nanoseconds>(std::chrono::minutes(1)).count()};
s64 standard_steady_clock_test_offset_ns{standard_steady_clock_test_offset_m * one_minute_ns};
auto reset_detected = m_steady_clock_resource.GetResetDetected();
if (reset_detected) {
external_clock_source_id = {};
}
Common::UUID clock_source_id{};
m_steady_clock_resource.Initialize(&clock_source_id, &external_clock_source_id);
if (clock_source_id != external_clock_source_id) {
m_set_sys->SetExternalSteadyClockSourceId(clock_source_id);
}
res = m_time_m->SetupStandardSteadyClockCore(clock_source_id, m_steady_clock_resource.GetTime(),
external_steady_clock_internal_offset_ns,
standard_steady_clock_test_offset_ns,
reset_detected);
ASSERT(res == ResultSuccess);
R_SUCCEED();
}0 - current_time in SystemClockCore::SetCurrentTime0 - current_time in SystemClockCore::SetCurrentTime 

Nvidiau_8 = uint(bitfieldExtract(uint(u_14), int(0u), int(16u)));
u_8 = uint(u_8 * 1u);
u_8 = u_8 << 16u;
u_14 = uint(bitfieldExtract(uint(u_14), int(16u), int(16u)));
u_8 = u_8 + u_14;
The fix?
-u_8 = u_8 + u_14;
+u_8 = u_8 | u_14;u_8 = u_14
glsl
uint low = uint(bitfieldExtract(some_number, 0, 16));
low <<= 16U;
uint high = uint(bitfieldExtract(some_number, 16, 16));
uint swapped = low + high;
Replace the addition with a bitwise or:
glsl
uint swapped = low | high;
Closes #12063
return false; right at the top for (const auto& cmd_buffer : command_buffers) {
const auto object = nvmap.GetHandle(cmd_buffer.memory_id);
ASSERT_OR_EXECUTE(object, return NvResult::InvalidState;);
Tegra::ChCommandHeaderList cmdlist(cmd_buffer.word_count);
system.ApplicationMemory().ReadBlock(object->address + cmd_buffer.offset, cmdlist.data(),
cmdlist.size() * sizeof(u32));
gpu.PushCommandBuffer(core.Host1xDeviceFile().fd_to_id[fd], cmdlist);
}
if we get the right address for the command buffer, dunno what else there would be
25
16SixAxis, ConsoleSixAxis and SevenSixAxis are actually different resources.
I also removed the array of controller base. As this will no longer hold true in the future. Controllers are similar but have way different structures so I can't use a common template anymore. I also find to be much cleaner to simply call GetNpad().
This shouldn't have any differenc...romfs/System/Resource/ResourceSizeTable.Product.100.rsizetable.zs:
[ResourceSizeTable.Product.100.rsizetable.zs](https://github.com/yuz...Service.Time, but in code it's Service_TimeService.Time, but in code it's Service_Time glBindVertexBuffers and glBindBuffersRange to bind a batch of buffers, rather than binding them one buffer at a time.
This alleviates some API call overhead, and outweighs the benefits of NV_vertex_buffer_unified_memory, so the paths using this extension can be removed.
Also includes some other minor optimizations in the area.
glBindBuffersRange can be used to batch the UBO/SSBO bindings as well, but that change is a bit intrusive, so it remains as a todo.1:-1:0) so it should always produce two fields from one frameint ret = av_...
LOG_ERROR(HW_GPU, "{}", av_err2str(ret)); int ret = av_buffersink_get_frame(av_filter_sink_ctx, frame.get());
if (ret == AVERROR(EAGAIN) || ret == AVERROR(AVERROR_EOF)) {
auto res_str = av_err2str(ret);
break;
}error C4576: a parenthesized type followed by an initializer list is a non-standard explicit type conversion syntaxstd::string AVError(int errnum) {
char errbuf[AV_ERROR_MAX_STRING_SIZE] = {};
av_make_error_string(errbuf, sizeof(errbuf) - 1, errnum);
return errbuf;
}zstd 1.5.0 brings numerous performance improvements. But this cha...StandardSteadyClockResource::SetCurrentTime when creating the steady clock resource, it has this subtraction of the end tick, which ends up taking off the time Yuzu's been open.offset -7 time point 1700516008 just returns things like thiss64 StandardSteadyClockCore::GetCurrentRawTimePoint_() {
std::scoped_lock l{m_mutex};
auto ticks{m_system.CoreTiming().GetClockTicks()};
auto current_time_ns = m_rtc_offset + ConvertToTimeSpan(ticks).count();
auto time_point = std::max(current_time_ns, m_cached_time_point);
m_cached_time_point = time_point;
return time_point;
} but the steady clock core does add ticks, you're rightoffset -5 time point 1700518925 so this is the context at boot time, and then the game later starts spamming
time_zone.cpp:Handle_ToCalendarTimeWithMyRule:207: called. time=1700518931, time_zone.cpp:Handle_ToPosixTime:227: called. calendar year 2023 month 11 day 20 hour 22 minute 22 second 11this is deprecated in C++20.##[error]src\core\hle\service\time\clock_types.h(111,19): Error C4002: too many arguments for function-like macro invocation 'GetCurrentTime' (compiling source file D:\a\1\s\src\yuzu\main.cpp)
1
1
5$ ls /usr/include/ffmpeg/libavcodec/codec
codec_desc.h codec.h codec_id.h codec_par.h m_format = AV_PIX_FMT_NV12;player_name to the end of player_ (edited)profile_name is the setting that we retrieve, not the key that's created with the appendSetTouchscreenDimensions
3 if (deep_scan) {
Common::FS::IterateDirEntriesRecursively(dir_path, callback,
Common::FS::DirEntryFilter::All);
} else {
Common::FS::IterateDirEntries(dir_path, callback, Common::FS::DirEntryFilter::File);
}
13FAILED: externals/gamemode/libgamemode.a
Building on macOS was fixed with one PR, but broken with another....
2
USE_DISCORD_PRESENCE) for easier testing disabled even on Linux.
1devices\nvhost_nvdec.cpp:OnOpen:72: NVDEC video stream started per videoContents folder and re-installing everything still in use.-DYUZU_ENABLE_LTO=ON, ninja fails to build.
-DYUZU_ENABLE_LTO=ON to your build arguments in cmake
2. Run ninja
3. See errors
AppletResource. Now we should care about the actual AppletResourceUserId(aruid) sent by games. While this change is pretty barebones I will be completing this implementation as I start migrating controllers features to use aruid values.
These changes are necessary to handle multiprocess properly in the future.root. This is a problem, however, for the custom drivers for both the joycons and the pro controller. Therefore, I am making this PR to add a udev ruels in the dist/ folder.
This is helpful for both appimage/flaptak users and users who get their controller via a system package manager. For the former group, instead of the user having to go to the discord and either see the pinned post with...UpdateDescriptorQueue::FRAMES_IN_FLIGHT from 7 -> 15 made it take much longer to crash. my other hypothesis from last night is that timeline semaphores do not actually induce a host<->gpu sync point if you're only checking the counter valuescheduler.Flush with scheduler.Finish in RendererVulkan::SwapBuffers regressed frame rate but reduced input lag. and in combination w/ disabling timeline semaphores and enabling reactive flushing it hasn't crashed.
but this is just a bunch of random bit flips for experimentation.scheduler.Flush with scheduler.Finish in RendererVulkan::SwapBuffers regressed frame rate but reduced input lag. and in combination w/ disabling timeline semaphores and enabling reactive flushing it hasn't crashed.
but this is just a bunch of random bit flips for experimentation. --- a/src/video_core/renderer_vulkan/vk_present_manager.cpp
+++ b/src/video_core/renderer_vulkan/vk_present_manager.cpp
@@ -167,6 +167,7 @@ void PresentManager::Present(Frame* frame) {
scheduler.Record([this, frame](vk::CommandBuffer) {
std::unique_lock lock{queue_mutex};
+ frame_cv.wait(lock, [this] { return present_queue.size() < 7; });
present_queue.push(frame);
frame_cv.notify_one();
});--- a/src/video_core/renderer_vulkan/vk_present_manager.cpp
+++ b/src/video_core/renderer_vulkan/vk_present_manager.cpp
@@ -167,6 +167,7 @@ void PresentManager::Present(Frame* frame) {
scheduler.Record([this, frame](vk::CommandBuffer) {
std::unique_lock lock{queue_mutex};
+ frame_cv.wait(lock, [this] { return present_queue.size() < 7; });
present_queue.push(frame);
frame_cv.notify_one();
}); nvdisp->flip in Nvnflinger::Compose (NOTE: Still not fully correct as it delays subsequent vsync events if nvdisp->flip is slow)
Getting higher FPS in Smash on ARM Mali, gameplay isn't tied 1:1 with render time except when vsync is delayed (detailed above). I'd attribute the higher frame rate to the fact that the game is getting backpressure AND the early vsync lets the game build command buffers much earlier.
Ideally Yuzu should move presentation towards the compositor model where display vsync is sent 1:1 to the game. It would also allow overlays to update even if the game is dropping frames.
On Android this would be done with AChoreographer which is actual display vsync. Windows has a DirectX API for it as well. egl may also expose it, idk lol (edited)nvdisp->flip in Nvnflinger::Compose (NOTE: Still not fully correct as it delays subsequent vsync events if nvdisp->flip is slow)
Getting higher FPS in Smash on ARM Mali, gameplay isn't tied 1:1 with render time except when vsync is delayed (detailed above). I'd attribute the higher frame rate to the fact that the game is getting backpressure AND the early vsync lets the game build command buffers much earlier.
Ideally Yuzu should move presentation towards the compositor model where display vsync is sent 1:1 to the game. It would also allow overlays to update even if the game is dropping frames.
On Android this would be done with AChoreographer which is actual display vsync. Windows has a DirectX API for it as well. egl may also expose it, idk lol (edited)--- a/src/video_core/renderer_vulkan/vk_present_manager.cpp
+++ b/src/video_core/renderer_vulkan/vk_present_manager.cpp
@@ -165,6 +165,11 @@ void PresentManager::Present(Frame* frame) {
return;
}
+ {
+ std::unique_lock lock{queue_mutex};
+ frame_cv.wait(lock, [this] { return present_queue.size() < 7; });
+ }
+
scheduler.Record([this, frame](vk::CommandBuffer) {
std::unique_lock lock{queue_mutex};
present_queue.push(frame);
but this would
rb.PushRaw<u64>(profile_manager->GetLastOpenedUser().Hash());
which I think generates some hash from UUID structure?profiles.dat and the user's save directory in nand/user/save/000.../(formatted UUID)

ninja test does not run the tests then what doesbrew install python it now returns an error. Homebrew explicitly rejected an option to force link during install so I guess this is the approach we'll be using.
2Kernel is no longer responsible for handling hid shared memory, instead applet resource will keep track of them which is the intended way. This allows us to have a shared memory instance per aruid.
In the process I had to assemble the all mighty SharedMemoryFormat. This turned to be a quite big change and had to hack my way too keep everything functional. While controller features still are inaccurate it allows me to proceed...
You can't return the reference to the newly constructed string.
You can assign a returned std::string value to a const std::string& or std::string&& to extend the lifetime but that doesn't apply here. (edited)
You can't return the reference to the newly constructed string.
You can assign a returned std::string value to a const std::string& or std::string&& to extend the lifetime but that doesn't apply here. (edited)auto str = std::make_unique<std::string>("Hello String");
const std::string& strref = *str;
str.reset();Then there's no mechanism to allow strref to extend the lifetime of *str
2
5last_accumulation_checkpoint would not be updated, passing in 0 as the max_accumulation_base to the prefix sum shader...
https://github.com/yuzu-emu/yuzu/blob/b8c50276869aa98bc3cf2622a18c08cf1fb66315/src/video_core/host_shaders/queries_prefix_scan_sum.comp#L107
This happens in Luigi's Mansion 3NV_vertex_buffer_unified_memory works around this and fixes the issue.HAS_NCE=1 (auto-detected).
VK_ENABLE_BETA_EXTENSIONS.DrawIndirectByteCount.
The macro execution takes a slightly different path for OpenGL since the TFB byte count is not readily available.
Fixes particles in XC3
https://github.com/yuzu-emu/yuzu/assets/52414509/db4e96bc-221f-4947-bd38-f4954f7880ff
4
1Enable Gamemode option on Linux doesn't get saved. I can disable the option, but it gets enabled again if I restart yuzu. I tested this on a portable build to make sure, that I don't have any broken file or configuration.
Writing frame luma to 0x3E3B000
Writing frame luma to 0x4139000
Writing frame luma to 0x4437000
Writing frame luma to 0x4735000
Writing frame luma to 0x4A33000
Writing frame luma to 0x3E3B000
Writing frame luma to 0x4139000
Writing frame luma to 0x4437000
Writing frame luma to 0x4735000
Writing frame luma to 0x4A33000
Writing frame luma to 0x3E3B000
Writing frame luma to 0x4139000
Writing frame luma to 0x4437000
Writing frame luma to 0x4735000
Writing frame luma to 0x4A33000
Writing frame luma to 0x3E3B000Writing frame luma to 0x3E3B000
Writing frame luma to 0x4139000
Writing frame luma to 0x4437000
Writing frame luma to 0x4735000
Writing frame luma to 0x4A33000
Reading frame from luma 0x3E3B000
Reading frame from luma 0x4139000
Writing frame luma to 0x3E3B000
Reading frame from luma 0x4437000
Writing frame luma to 0x4139000
Reading frame from luma 0x4735000
Writing frame luma to 0x4437000
Reading frame from luma 0x4A33000
Writing frame luma to 0x4735000
Reading frame from luma 0x3E3B000
Writing frame luma to 0x4A33000
Reading frame from luma 0x4139000
Writing frame luma to 0x3E3B000
Reading frame from luma 0x4437000
Writing frame luma to 0x4139000
Reading frame from luma 0x4735000
Writing frame luma to 0x4437000
Reading frame from luma 0x4A33000
Writing frame luma to 0x4735000
Reading frame from luma 0x3E3B000
Writing frame luma to 0x4A33000
Reading frame from luma 0x4139000
Writing frame luma to 0x3E3B000Writing frame luma to 0x3E3B000
Writing frame luma to 0x4139000
Writing frame luma to 0x4437000
Writing frame luma to 0x4735000
Writing frame luma to 0x4A33000
Reading frame from luma 0x3E3B000
Reading frame from luma 0x4139000
Writing frame luma to 0x3E3B000
Reading frame from luma 0x4437000
Writing frame luma to 0x4139000
Reading frame from luma 0x4735000
Writing frame luma to 0x4437000
Reading frame from luma 0x4A33000
Writing frame luma to 0x4735000
Reading frame from luma 0x3E3B000
Writing frame luma to 0x4A33000
Reading frame from luma 0x4139000
Writing frame luma to 0x3E3B000
Reading frame from luma 0x4437000
Writing frame luma to 0x4139000
Reading frame from luma 0x4735000
Writing frame luma to 0x4437000
Reading frame from luma 0x4A33000
Writing frame luma to 0x4735000
Reading frame from luma 0x3E3B000
Writing frame luma to 0x4A33000
Reading frame from luma 0x4139000
Writing frame luma to 0x3E3B000 Writing frame luma to 0x429000
Writing frame luma to 0x727000
Writing frame luma to 0xA25000
Writing frame luma to 0xD23000
Writing frame luma to 0x1021000
Writing frame luma to 0x131F000
Writing frame luma to 0x161D000
Writing frame luma to 0x191B000
Writing frame luma to 0x1C19000
Writing frame luma to 0x1F17000
Reading frame from luma 0x429000
Writing frame luma to 0x2A29000
Reading frame from luma 0x727000
Reading frame from luma 0xA25000
Writing frame luma to 0x727000
Writing frame luma to 0xA25000
Reading frame from luma 0xD23000
Writing frame luma to 0xD23000
Reading frame from luma 0x1021000
Writing frame luma to 0xA25000
Reading frame from luma 0x131F000
Writing frame luma to 0x1021000
Reading frame from luma 0x161D000
Writing frame luma to 0x131F000
Reading frame from luma 0x191B000
Writing frame luma to 0x161D000
Reading frame from luma 0x1C19000
Writing frame luma to 0x191B000
Reading frame from luma 0x1F17000
Writing frame luma to 0x1C19000
Reading frame from luma 0x2A29000
Writing frame luma to 0x1F17000
Reading frame from luma 0x727000
Writing frame luma to 0x2A29000
Reading frame from luma 0xA25000 these get long, but look at 0xA25000 here for example for (size_t i = 0; i < config.slot_structs.size(); i++) {
auto& slot_config{config.slot_structs[i]};
if (!slot_config.config.slot_enable) {
continue;
}
auto luma_offset{regs.surfaces[i][SurfaceIndex::Current].luma.Address()};
LOG_ERROR(HW_GPU, "Reading frame from luma 0x{:X}", luma_offset);
auto frame = nvdec_processor.GetFrame(luma_offset); ConfigStruct config{};
memory_manager.ReadBlock(regs.config_struct_offset.Address(), &config, sizeof(ConfigStruct));
3146f74a8 00007ff8667f30ce ntdll!NtWaitForSingleObject+0x14
01 000000d1146f74b0 00007ff61169d1e5 KERNEL...yuzu) which does not match the expected value org.yuzu_emu.yuzu. We can fix this and fix window associations on compliant compositors (like Plasma) by using the setDesktopFileName() function which will set the appId window property. This i...SDL_GetError in yuzu-cmd in some places where it previously didn't._ as the separator instead of . to match the code. Also add a hint on the log filter, as I always forget how to use it after a while.NpadResource and NpadData. NpadResource servers as an interface for most AbstractedPad objects which aren't implemented at the moment. NpadData holds the config set by the game which change the behavior of the controller.
With this PR we start using the aruid argument from the HID interfaces. Allowing us to keep the NPad state functional under all circumstances."Nintendo Switch"-Spiele.
This works until i restart yuzu; after that, the "-symbols are removed from the path.
After testing various AppImage-versions of yuzu, mainline 1626 seems to be the last version in which it works.
In mainline 1627 those are replaced with a \, somewhere from m....desktop-files contain a temporary mount-path like /tmp/.mount_Yuzu.AEcGqen/usr/./bin/yuzu, instead of the path to the AppImage.
This will work until yuzu is closed once.
2. When trying to open a game that has a "-symbo...
12
1fatal: not a git repository: /Users/user/yuzu/build/externals/nx_tzdb/tzdb_to_nx/externals/tz/tmpsrc/../../../../../../.git/modules/tzdb_to_nx/modules/externals/tz/tz
5
4src/video_core/.
13
5
6
1
15
7adb logcat -b crashverify step for PRs like clang-format.
This also adds a hint to run gradlew ktlintFormat to automatically format your code if the verification steps fail.
7
3
git rebase -i origin/master to check which commits are going to be pushed
[ 116.424942] Service.Nvnflinger <Error> core\hle\service\nvnflinger\buffer_queue_producer.cpp:Connect:700: already connected (cur = 1 req = 1)
1
1VK_KHR_calibrated_timestamp
VK_KHR_format_feature_flags2
VK_KHR_vertex_attribute_divisor
VK_EXT_extended_dynamic_state3 (Metal does not support VK_POLYGON_MODE_POINT)
3cpu: host in proxmox, or if I duplicated the entire set of cpu flags which that generates (qm showcmd) into the args: line.
BUT if I started poking around with the args: line, including but not limited to disabling the hypervisor (even just changing which hv_ flags are set), then Breath of the Wild would randomly softlock during loading screens.
Not sure now how I stumbled upon the solution but I set +invtsc and suddenly not only did the bug go away, I got a whole bunch of extra single-thread performance (5800X3D). (edited)
1
1
1
/s (edited)

5
5
4
5Result-returning versions of ...
[100%] Linking CXX executable ../../bin/yuzu
/usr/bin/ld: CMakeFiles/yuzu.dir/configuration/qt_config.cpp.o: in function Config::~Config()':
qt_config.cpp:(.text._ZN6ConfigD2Ev[_ZN6ConfigD2Ev]+0x69): undefined reference to `CSimpleIniTempl::~CSimpleIniTempl()'
/usr/bin/ld: ../frontend_common/CMakeFiles/fro...Taiko no Tatsujin Rhythm Festival send vibrations before vibration is initialized. I reviewed the code a couple of times but there's no mistake from my RE. The only explanation I found is that vibration is probably already initialized from system side. To fix this issue I simply avoid any vibration while the handle is inactive.
Fixes #12797
8
8
4AtomicCompareAndSwaps with a uintptr_t.
#define NVB197_TEXHEAD_BL_GOB3D MW(109:109) ? Like what does the define refer to ? I would have guessed something with bitfield... offset:length, start:end ? hmmm ... and what could MW() mean... did neither find another definition nor an include for this. This is taken from https://github.com/NVIDIA/open-gpu-doc/blob/master/classes/3d/clb197tex.h#L448. The goal is that i am trying to understand how a proper texture struct may look like (matching to this definition)mprotect overhead; attempts to improve start-up speed.
As this is just a change to the way memory is allocated, in theory, this should not cause any regressions.
5
3VCPKG_FORCE_SYSTEM_BINARIES=1 cmake .. -GNinja -DCMAKE_C_COMPILER=gcc-11 -DCMAKE_CXX_COMPILER=g++-11 -DYUZU_USE_QT_WEB_ENGINE=ON -DLINUX=1 -DYUZU_USE_BUNDLED_VCPKG=ON
This commit fixes build error:
```
/build/deb_build/yuzu-0-1696/src/core/hle/service/set/setting_formats/system_settings.cpp:47:53: error: no match for ‘operator=’ (operand types are ‘Service::PSC::Time::LocationName’ and ‘’)
47 | settings.device_time_zone_location_n...HW.Memory <Error> ./core/device_memory_manager.inc:operator():456: Unmapped Device ReadBlock @ 0x000000008B01C000 (start address = 0x000000008B00D000, size = 69632) I guess this counts as access violation, but yuzu will crash thenHW.Memory <Error> ./core/device_memory_manager.inc:operator():456: Unmapped Device ReadBlock @ 0x000000008B01C000 (start address = 0x000000008B00D000, size = 69632) leading to a sigsegv... with unmodified sources of mainline 1696, but built with the ci scripts and the docker image, involving gcc 12.2.0
If it's doing an MSAA convertion on an srgb image then it probably needs to be converted to draw to be handled correctlyNtSetTimerResolution has also been a HUGE help for WindowsWAITPKG and the AMD equivalent help even furtherResult GetTimeZoneRule(std::span<const u8>& out_rule, why is the out const
10
: Took you long enough



VK_DRIVER_ID_SAMSUNG_PROPRIETARY driver ID to the reorder passFindVulkan.cmake module provided by CMake is deprecated and will be removed in the future, so use upstream VulkanHeadersConfig.cmake file instead.
VUID-vkCmdDrawIndexed-None-08600(ERROR / SPEC): msgNum: 941228658 - Validation Error: [ VUID-vkCmdDrawIndexed-None-08600 ] Object 0: handle = 0xf7ff090000001c9d, type = VK_OBJECT_TYPE_PIPELINE; | MessageID = 0x381a0272 | vkCmdDrawIndexed(): The VkPipeline 0xf7ff090000001c9d[] (created with VkPipelineLayout 0xf257a60000001acb[]) statically uses descriptor set (index #0) which is not compatible with the currently bound descriptor set's pipeline layout (VkPipelineLayout 0x0[]). The Vulkan spec states: For each set n that is statically used by a bound shader, a descriptor set must have been bound to n at the same pipeline bind point, with a VkPipelineLayout that is compatible for set n, with the VkPipelineLayout used to create the current VkPipeline or the VkDescriptorSetLayout array used to create the current VkShaderEXT , as described in Pipeline Layout Compatibility (https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#VUID-vkCmdDrawIndexed-None-08600)
Objects: 1
[0] 0xf7ff090000001c9d, type: 19, name: NULL
There's a bunch of these which pipeline layout incompatibilities, they can cause a page fault as it may cause the GPU to access a descriptor that isn't bound. (edited)VUID-VkImageViewCreateInfo-pNext-02662(ERROR / SPEC): msgNum: -55646969 - Validation Error: [ VUID-VkImageViewCreateInfo-pNext-02662 ] Object 0: handle = 0x27983e0000000108, type = VK_OBJECT_TYPE_IMAGE; | MessageID = 0xfcaee507 | vkCreateImageView(): pCreateInfo->pNext<VkImageViewUsageCreateInfo>.usage (VK_IMAGE_USAGE_TRANSFER_SRC_BIT|VK_IMAGE_USAGE_TRANSFER_DST_BIT|VK_IMAGE_USAGE_SAMPLED_BIT|VK_IMAGE_USAGE_STORAGE_BIT|VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT) must not include any bits that were not set in VkImageCreateInfo::usage (VK_IMAGE_USAGE_TRANSFER_SRC_BIT|VK_IMAGE_USAGE_TRANSFER_DST_BIT|VK_IMAGE_USAGE_SAMPLED_BIT|VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT) of the image. The Vulkan spec states: If the pNext chain includes a VkImageViewUsageCreateInfo structure, and image was not created with a VkImageStencilUsageCreateInfo structure included in the pNext chain of VkImageCreateInfo, its usage member must not include any bits that were not set in the usage member of the VkImageCreateInfo structure used to create image (https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#VUID-VkImageViewCreateInfo-pNext-02662)
Objects: 1
[0] 0x27983e0000000108, type: 10, name: NULLVK_IMAGE_USAGE_STORAGE_BIT does cause a lot of perf overhead for us due to it disabling UBWC but rather than just dropping it from image, you should recreate the image dynamically with VK_IMAGE_USAGE_STORAGE_BIT when you have a view that needs storage usage.VK_IMAGE_USAGE_STORAGE_BIT does cause a lot of perf overhead for us due to it disabling UBWC but rather than just dropping it from image, you should recreate the image dynamically with VK_IMAGE_USAGE_STORAGE_BIT when you have a view that needs storage usage. VkImageViews, only in VkImage itself. So that shouldn't result in lower performance on Turnip as presumably you're only setting VK_IMAGE_USAGE_STORAGE_BIT on the view? (edited)VkImageViews, only in VkImage itself. So that shouldn't result in lower performance on Turnip as presumably you're only setting VK_IMAGE_USAGE_STORAGE_BIT on the view? (edited)UnlinkNode function, I don't understand why std::addressof(m_thread_list_head) (should be ThreadListNode**) is reinterpret_cast to ...

if (streamer == nullptr || counter_type == QueryType::ZPassPixelCount64) [[unlikely]] {
alias and aslr memory spaces, pause/resume opcodes returning as invalid opcodes.
Note: Pause and Resume aren't implemented yet. I need to research a bit before implementing them.
5NVIDIA Drivers >= 510 do not support MSAA image blits. The thing is, that I have currently, as you can see ...
6
14android instead of android-236
2 rb.Push(static_cast<u32>(write_size * sizeof(DeliveryCacheDirectoryEntry)));
7SetNpadMode because "We have two controllers connected to the same npad_id we need to split them". Is that new player3=>keyboard expected behavior? (edited)SetNpadMode because "We have two controllers connected to the same npad_id we need to split them". Is that new player3=>keyboard expected behavior? (edited)IsExternalDeviceConnected and update the shared memory accordingly https://github.com/yuzu-emu/yuzu/blob/master/src/core/hle/service/hid/hidbus.h#L78IsExternalDeviceConnected and update the shared memory accordingly https://github.com/yuzu-emu/yuzu/blob/master/src/core/hle/service/hid/hidbus.h#L78 IsExternalDeviceConnected and check whether the ring is still connected? If not the game will redo the initialization again?
IsExternalDeviceConnected) and see the game's behavior.
Mimic the game's behavior and call a bunch of functions from the qt settings is a worse approach, right?QString to QSettings::remove in order to delete an entire section. 
GetKeyCodeMap correctly as previous implementation was completely wrong.controller_2 here seems to have default empty mapping. Is this intended or indeed left unimplemented?
PS: will redirect future discussions to DM. Didn't see the moderator message. (edited)
6
7
5
64 files changed, 1746 insertions(+), 1471 deletions(-)
8
application_functions.cpp: *out_max_normal_size = 0xFFFFFFF;
application_functions.cpp: *out_max_journal_size = 0xFFFFFFF;this are they the same both times?
2
2
ISaveDataInfoReader::FindAllSaves?
What I could imagine happening is that our vfs does not check all the locations it should, and therefore not seeing all the files...
That would still not explain the empty buffer writes though
7








9
66,262 additions and 45,607 deletions
0100E8801D97E000), Wet Steps (0100B5001D0E6000) and The Sin (01009F201BB50000). CEIBA seems to be affected the most, as it is using a ton of animations. The Sin is mostly playable except minor glit...
7
7



the graphics dont exactly look too fresh if i put it on new visuals lolGetCheats and call ToggleCheat with the correct cheat id. To enable it or disable itgit submodule sync
git submodule foreach --recursive git reset --hard
git submodule update --init --recursive


GetCheats and call ToggleCheat with the correct cheat id. To enable it or disable it 
signal 11 (SIGSEGV), code 2 (SEGV_ACCERR), fault addr 0x000000781e5ff000
x0 0000000000000d40 x1 000000000015e530 x2 00000000000001b0 x3 000000000000b8a0
x4 000000000015f230 x5 b40000781e5ff030 x6 b400007c218e7458 x7 000000000000b970
x8 000000000002e440 x9 00000000000001a7 x10 00000000000001c0 x11 00000000000000e0
x12 00000000000001a8 x13 b4000079287cdfe0 x14 00000000000001a8 x15 b400007c218dbae0
x16 b400007c218ebaf0 x17 00000000000001a8 x18 00000077c542e000 x19 b400007ac1042a30
x20 000000000000b978 x21 b400007ac1043ce0 x22 000000000002e5e8 x23 00000000000001a8
x24 00000000000001a8 x25 000000000002be40 x26 b400007c70e7db90 x27 00000078ffe81460
x28 0000000000000000 x29 00000078ffe81a60
lr 0000007a48768e2c sp 00000078ffe812c0 pc 0000007a48768fbc pst 0000000020001000
5 total frames
backtrace:
#00 pc 000000000175cfbc libyuzu-android.so (Tegra::Host1x::Vic::Execute()+2276)
#01 pc 000000000174ee90 libyuzu-android.so (Tegra::CDmaPusher::ProcessEntries(std::stop_token)+2208)
#02 pc 000000000174fd04 libyuzu-android.so (BuildId: e82727702e63951e5b1a43214f11ae24a4f4493d)
#03 pc 000000000010ce98 apex/com.android.runtime/lib64/bionic/libc.so (__pthread_start(void*)+228)
#04 pc 00000000000a6768 apex/com.android.runtime/lib64/bionic/libc.so (__start_thread+68)(gdb) info line *0x0000000001825e88
Line 5469 of "externals/sse2neon/sse2neon.h"
starts at address 0x1825e88 <_ZN5Tegra6Host1x3Vic28ReadProgressiveY8__V8U8_N420ILb1ELb0EEEvRKNS0_10SlotStructENSt6__ndk14spanIKNS0_12PlaneOffsetsELm18446744073709551615EEENS6_10shared_ptrIKN6FFmpeg5FrameEEE+1752>
and ends at 0x1825e8c <_ZN5Tegra6Host1x3Vic28ReadProgressiveY8__V8U8_N420ILb1ELb0EEEvRKNS0_10SlotStructENSt6__ndk14spanIKNS0_12PlaneOffsetsELm18446744073709551615EEENS6_10shared_ptrIKN6FFmpeg5FrameEEE+1756>.void Tegra::Host1x::Vic::ReadProgressiveY8__V8U8_N420<true, false>(Tegra::Host1x::SlotStruct const&, std::__ndk1::span<Tegra::Host1x::PlaneOffsets const, 18446744073709551615ul>, std::__ndk1::shared_ptr<FFmpeg::Frame const>)Line 490 of "src/video_core/host1x/vic.cpp" (that's the last unlabeled symbol) 0x1825e78 <+1736>: mov w1, w8
0x1825e7c <+1740>: mov x0, x19
0x1825e80 <+1744>: bl 0x18215fc <_ZN6Common13ScratchBufferIN5Tegra6Host1x5PixelEEixEm>
0x1825e84 <+1748>: ldr q0, [sp, #272]
=> 0x1825e88 <+1752>: str q0, [x0]
0x1825e8c <+1756>: ldur w8, [x29, #-244]
0x1825e90 <+1760>: ldur w9, [x29, #-248]
0x1825e94 <+1764>: add w8, w8, w9
0x1825e98 <+1768>: add w8, w8, #0xa
0x1825e9c <+1772>: mov w1, w8
0x1825ea0 <+1776>: mov x0, x19
0x1825ea4 <+1780>: bl 0x18215fc <_ZN6Common13ScratchBufferIN5Tegra6Host1x5PixelEEixEm>
0x1825ea8 <+1784>: ldr q0, [sp, #256]
0x1825eac <+1788>: str q0, [x0]
0x1825eb0 <+1792>: ldur w8, [x29, #-244]
0x1825eb4 <+1796>: ldur w9, [x29, #-248] 0x1825e78 <+1736>: mov w1, w8
0x1825e7c <+1740>: mov x0, x19
0x1825e80 <+1744>: bl 0x18215fc <_ZN6Common13ScratchBufferIN5Tegra6Host1x5PixelEEixEm>
0x1825e84 <+1748>: ldr q0, [sp, #272]
=> 0x1825e88 <+1752>: str q0, [x0]
0x1825e8c <+1756>: ldur w8, [x29, #-244]
0x1825e90 <+1760>: ldur w9, [x29, #-248]
0x1825e94 <+1764>: add w8, w8, w9
0x1825e98 <+1768>: add w8, w8, #0xa
0x1825e9c <+1772>: mov w1, w8
0x1825ea0 <+1776>: mov x0, x19
0x1825ea4 <+1780>: bl 0x18215fc <_ZN6Common13ScratchBufferIN5Tegra6Host1x5PixelEEixEm>
0x1825ea8 <+1784>: ldr q0, [sp, #256]
0x1825eac <+1788>: str q0, [x0]
0x1825eb0 <+1792>: ldur w8, [x29, #-244]
0x1825eb4 <+1796>: ldur w9, [x29, #-248] @@ -123,7 +125,7 @@ void Vic::Execute() {
auto output_width{config.output_surface_config.out_surface_width + 1};
auto output_height{config.output_surface_config.out_surface_height + 1};
- output_surface.resize_destructive(output_width * output_height);
+ output_surface.resize_destructive(Common::AlignUp(output_width * output_height, 128));
if (Settings::values.nvdec_emulation.GetValue() == Settings::NvdecEmulation::Off) [[unlikely]] {
// Fill the frame with black, as otherwise they can have random data and be very glitchy.
@@ -194,7 +196,7 @@ void Vic::ReadProgressiveY8__V8U8_N420(const SlotStruct& slot,
out_luma_height *= 2;
}
- slot_surface.resize_destructive(out_luma_width * out_luma_height);
+ slot_surface.resize_destructive(Common::AlignUp(out_luma_width * out_luma_height, 128));
const auto in_luma_width{std::min(frame->GetWidth(), static_cast<s32>(out_luma_width))};
const auto in_luma_height{std::min(frame->GetHeight(), static_cast<s32>(out_luma_height))}; for (s32 x = 0; x < in_luma_width; x += 16) {
the code advances by 16 pixels at a time, but the actual amount of pixels to store may need to be less than 16 const auto alpha{static_cast<u16>(slot.config.planar_alpha.Value())};
for (s32 y = 0; y < in_luma_height; y++) {
const auto src_luma{y * in_luma_stride};
const auto src_chroma{(y / 2) * in_chroma_stride};
const auto dst{y * out_luma_stride};
for (s32 x = 0; x < in_luma_width; x++) {
slot_surface[dst + x].r = static_cast<u16>(luma_buffer[src_luma + x] << 2);
// Chroma samples are duplicated horizontally and vertically.
if constexpr (Planar) {
slot_surface[dst + x].g =
static_cast<u16>(chroma_u_buffer[src_chroma + x / 2] << 2);
slot_surface[dst + x].b =
static_cast<u16>(chroma_v_buffer[src_chroma + x / 2] << 2);
} else {
slot_surface[dst + x].g =
static_cast<u16>(chroma_u_buffer[src_chroma + (x & ~1) + 0] << 2);
slot_surface[dst + x].b =
static_cast<u16>(chroma_u_buffer[src_chroma + (x & ~1) + 1] << 2);
}
slot_surface[dst + x].a = alpha;
}
}
(edited)




git clone --mirror only includes the git repo, not issues, PRs etc.

theyre on an 11 year old cpu
welp, can reproduce on modern hardware anyway so yeah (edited)
6


1
1
1
1
1
1
28
21
3
3
4
4